package com.wyth.lottery.utils;

public class MathC {
	
	/**
	 * 七乐彩胆拖玩法注数计算
	 * @param dan 选中胆码的个数，需<=6
	 * @param tuo 选中拖码的个数，需<=29
	 * @return
	 */
	public static int number7LDT(int dan,int tuo){
		int a=7-dan;
		int re=c(tuo,a);
		return re;
	}
	
	/**
	 * 七乐彩普通玩法注数计算
	 * @param selected 选中号码的个数，需>=7
	 * @return
	 */
	public static int number7L(int selected){
		int re=c(selected,7);
		return re;
	}
	
	/**
	 * 福彩3D组六复试注数计算
	 * @param selected 选中号码的个数，需>=3
	 * @return
	 */
	public static int number3DZu6(int selected){
		int re=c(selected,3);
		return re;
	}
	
	/**
	 * 福彩3D组三复试注数计算
	 * @param selected 选中号码的个数，需>=2
	 * @return
	 */
	public static int number3DZu3(int selected){
		return selected*(selected-1);
	}
	
	/**
	 * 福彩3D直选注数计算
	 * @param bai 百位选中号码的个数
	 * @param shi 十位选中号码的个数
	 * @param ge 个位选中号码的个数
	 * @return
	 */
	public static int number3D(int bai,int shi,int ge){
		return bai*shi*ge;
	}
	
	/**
	 * 双色球注数计算——胆拖投注
	 * @param dan 胆码个数，胆码最多5个
	 * @param tuo 拖码个数，拖码至少选择2个
	 * @param blue 蓝色个数，至少一个
	 * @return 双色球胆拖投注注数
	 */
	public static int numberDT(int dan,int tuo,int blue){
		int a=6-dan;
		int re=c(tuo,a)*blue;
		return re;
	}
	
	/**
	 * 雙色球注數計算
	 * @param red 紅色球個數
	 * @param blue 藍色球個數
	 * @return 雙色球注數
	 */
	public static int number(int red,int blue){
		int re=c(red,6)*blue;
		return re;
	}
	
	/**
	 * 求組合的結果
	 * @param n
	 * @param m
	 * @return C(n,m)的結果
	 */
	public static int c(int n, int m){
		return chengfa(n, m)/jiecheng(m);
	}
	
	private static int jiecheng(int p){
		int a = 1;
		for(int i = 1; i < p+1; i++){
			a = i * a;
		}
		return a;
	}

	private static int chengfa(int b,int c){
		int d = 1;
		for(int i = b; i > b-c; i--){
			d = i * d;
		}
		return d;
	}	
}
